home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 5
/
Gold Medal Software - Volume 5 (Gold Medal) (1995).iso
/
windows
/
win31
/
cenviw.arj
/
BATTMEM.CMM
< prev
next >
Wrap
Text File
|
1994-03-04
|
6KB
|
179 lines
/*********************************************************************************
*** Battmem.bat - Display status saved in battery-backed memory registers. ***
*** ver.1 This examples programs displays how to use CEnvi to read ***
*** data from hardware ports, and how to manipulate bits within ***
*** a byte. ***
*********************************************************************************/
printf("These are values read from battery-operated memory:\n");
#define CLOCK_ADDRESS_REG 0x70 // put address to read here
#define CLOCK_READ_REG 0x71 // read value from address
#define BLANK_LINE printf("\n")
BLANK_LINE
/*****************************************************/
/* SHOW ERRORS THAT MAY OCCUR IN THE DIAGNOSTIC BYTE */
/*****************************************************/
#define DIAGNOSTIC_REG_ADDRESS 0x0E
#define DIAG_BYTES_UNUSED 0x03
#define DATETIME_ERROR 0x04
#define HARD_DRIVE_ERROR 0x08
#define MEMSIZE_ERROR 0x10
#define BAD_CONFIG_BYTE 0x20
#define CHECKSUM_ERROR 0x40
#define DEAD_CLOCK_BATTERY 0x80
diag = ReadByte(DIAGNOSTIC_REG_ADDRESS) & ~DIAG_BYTES_UNUSED
if ( 0 == diag )
printf("No errors in the Diagnostic Byte Structure.\n")
else {
if ( diag & DATETIME_ERROR )
printf("Date or time incorrect!\a\n")
if ( diag & HARD_DRIVE_ERROR )
printf("Hard drive or controler error!\a\n")
if ( diag & MEMSIZE_ERROR )
printf("Memory size incorrect!\a\n")
if ( diag & BAD_CONFIG_BYTE )
printf("Configuration byte is incorrect!\a\n")
if ( diag & CHECKSUM_ERROR )
printf("Checksum incorrect!\a\n")
if ( diag & DATETIME_ERROR )
printf("Realtime battery clock is dead!\a\n")
}
BLANK_LINE
/*******************************/
/* STATUS AT SYSTEM POWER DOWN */
/*******************************/
#define POWERDOWN_REG 0x0F
printf("Status at system powerdown = %d\n",ReadByte(POWERDOWN_REG))
BLANK_LINE
/***********************************/
/* STATUS OF FIRST TWO DISK DRIVES */
/***********************************/
#define DRIVETYPE_REG 0x10
DriveTypes = ReadByte(DRIVETYPE_REG)
printf("The first floppy drive is type: %s\n", DriveDescription(Bits(DriveTypes,4,4)) )
printf("The second floppy drive is type: %s\n", DriveDescription(Bits(DriveTypes,0,4)) )
DriveDescription(type)
{
switch( type ) {
case 0
description = "Not Installed"
break
case 1
description = "5-1/4, 320/360K"
break
case 2
description = "5-1/4, 1.2 meg"
break
case 3
description = "3-1/2, 720K"
break
case 4
description = "3-1/2, 1.44 meg"
break
default
sprintf(description,"Unknown drive type %d",type)
break
}
return(description)
}
BLANK_LINE
/***************************************/
/* SHOW TYPES OF FIRST TWO HARD DRIVES */
/***************************************/
#define HARD_DRIVE_1_REG 0x11
#define HARD_DRIVE_2_REG 0x12
printf("Hard drive 1 is type %d\n",ReadByte(HARD_DRIVE_1_REG))
printf("Hard drive 2 is type %d\n",ReadByte(HARD_DRIVE_2_REG))
BLANK_LINE
/**********************************/
/* SHOW CONFIGURATION INFORMATION */
/**********************************/
#define CONFIGURATION_REG 0x14
#define NO_DRIVE_OFFSET 0
#define COPROCESSOR_OFFSET 1
#define HARDDRIVE_ERROR_OFF 3
#define VIDEO_STARTUP_OFF 4
#define VIDEO_STARTUP_COUNT 2
#define DISK_DRIVE_COUNT_OFF 6
#define DISK_DRIVE_COUNT_NUM 2
config = ReadByte(CONFIGURATION_REG)
printf("At lease 1 disk drive is%s installed.\n",Bits(config,NO_DRIVE_OFFSET,1) ? "" : " NOT" )
printf("Math coprocessor is%s installed.\n",Bits(config,COPROCESSOR_OFFSET,1) ? "" : " NOT" )
if Bits(config,HARDDRIVE_ERROR_OFF,1)
printf("Hard drive or controller error.\n")
printf("Video mode at startup is: ")
switch( Bits(config,VIDEO_STARTUP_OFF,VIDEO_STARTUP_COUNT) ) {
case 0 printf("unknown.\n") break
case 1 printf("CGA/EGA/VGA, 40 columns.\n") break
case 2 printf("CGA,EGA,CGA, 80 columns.\n") break
case 3 printf("MDA/Hercules, 80 columns\n") break
}
printf("Number of disk drives = %d.\n",Bits(config,DISK_DRIVE_COUNT_OFF,DISK_DRIVE_COUNT_NUM))
BLANK_LINE
/***********************************************/
/* SHOW MAIN MEMORY AND EXPANSION MEMORY SIZES */
/***********************************************/
#define MEM_SIZE_REG 0x15
#define EXPANSION_MEM_REG 0x17
#define EXPANSION2_REG 0x30
printf("Main memory size = %d K-bytes\n",ReadWord(MEM_SIZE_REG))
printf("Expansion board's main memory size = %d K-bytes\n",ReadWord(EXPANSION_MEM_REG))
printf("Expansion memory size = %d K-bytes\n",ReadWord(EXPANSION2_REG))
BLANK_LINE
/***************************/
/* TIME, DATE, AND CENTURY */
/***************************/
#define CENTURY_REG 0x32
#define CLOCK_STATUS_REG 0x0B
century = ReadByte(CENTURY_REG)
printf("Century is: %d%d00\n",Bits(century,4,4),Bits(century,0,4))
clock = ReadByte(CLOCK_STATUS_REG)
printf("Daylight savings time is%s in effect.\n",Bits(clock,0,1) ? "" : " not" )
printf("Time is kept in %d hour format.",Bits(clock,1,1) ? 24 : 12 )
/***************************************************************/
/* All done; wait until a key is pressed or the program closed */
/***************************************************************/
if ( defined(_WINDOWS_) )
getch();
/******************************************/
/* UTILITY FUNCTIONS USED IN THIS PROGRAM */
/******************************************/
Bits(ByteValue,BitOffset,BitCount)
// return specific bits in a byte, and shift them to the right.
{
// clear all bits above BitCount
for ( mask = 0, i = 0; i < BitCount; i++ )
mask |= 1 << i
return((ByteValue >> BitOffset) & mask)
}
ReadByte(RegisterAddress)
{
outport(CLOCK_ADDRESS_REG,RegisterAddress)
return(inport(CLOCK_READ_REG))
}
ReadWord(RegisterAddress)
{
return( ReadByte(RegisterAddress) | ( ReadByte(RegisterAddress+1) << 8 ) )
}